import win32api
import win32gui
import win32con
import time

# 定义红点半径和颜色
DOT_RADIUS = 10
DOT_COLOR = 0x0000FF  # 红色 (ARGB格式)


def clear_screen(hdc):
    # 清除整个屏幕的内容 (用黑色填充)
    win32gui.BitBlt(hdc, 0, 0, win32api.GetSystemMetrics(0), win32api.GetSystemMetrics(1),
                    hdc, 0, 0, win32con.SRCCOPY)


def draw_dot(x, y):
    hdc = win32gui.GetDC(0)

    # 清除之前绘制的内容
    clear_screen(hdc)
    # 限制坐标范围，以防超出可绘制区域
    x = min(max(x, DOT_RADIUS), win32api.GetSystemMetrics(0) - DOT_RADIUS)  # 确保 x 在屏幕宽度内
    y = min(max(y, DOT_RADIUS), win32api.GetSystemMetrics(1) - DOT_RADIUS)  # 确保 y 在屏幕高度内



    hpen = win32gui.CreatePen(win32con.PS_SOLID, 1, DOT_COLOR)
    hbrush = win32gui.CreateSolidBrush(DOT_COLOR)

    hOldPen = win32gui.SelectObject(hdc, hpen)
    hOldBrush = win32gui.SelectObject(hdc, hbrush)

    # 画圆点
    win32gui.Ellipse(hdc, x - DOT_RADIUS, y - DOT_RADIUS, x + DOT_RADIUS, y + DOT_RADIUS)

    win32gui.SelectObject(hdc, hOldPen)
    win32gui.SelectObject(hdc, hOldBrush)

    win32gui.DeleteObject(hpen)
    win32gui.DeleteObject(hbrush)
    win32gui.ReleaseDC(0, hdc)


def main():
    while True:
        # 获取当前鼠标位置
        x, y = win32api.GetCursorPos()

        # 直接在屏幕上绘制红点
        draw_dot(x, y)

        # 刷新速度
        time.sleep(0.01)  # 10 毫秒


if __name__ == "__main__":
    main()
